package com.inftech.mauto.sys.service;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.inftech.mauto.common.constant.BusinessConstant;
import com.inftech.mauto.common.utils.CommonUtils;
import com.inftech.mauto.sys.dao.IIdentifierDao;
import com.mingsoft.base.biz.impl.BaseBizImpl;
import com.mingsoft.base.dao.IBaseDao;

@SuppressWarnings({ "unchecked", "rawtypes" })
@Service("identifierService")
public class IdentifierService extends BaseBizImpl {

	/**
	 * 标识持久化层注入
	 */
	@Autowired
	private IIdentifierDao identifierDao;

	@Override
	protected IBaseDao getDao() {
		return identifierDao;
	}

	/**
	 * 获取编号
	 */
	public String readIdentifierBySeparator(String separator) throws Exception {
		Map<String, Object> paramMap = new HashMap<String, Object>();
		Date now = CommonUtils.getNowD();
		paramMap.put("separator1", separator);
		paramMap.put("now", now);
		String identifier = "";
		String todayStr = CommonUtils.getTodayStr();
		if (separator.equals(BusinessConstant.ORDER_SEPARATOR_BP)) {
			// 流水号
			paramMap.put("separator2", todayStr);
			Integer identifierdb = identifierDao.getIdentifierBySeparator(paramMap);
			if (identifierdb == null) {
				// 数据不存在
				identifier = separator + todayStr + "001";
				// 插入新数据
				identifierDao.insertIdentifier(paramMap);
			} else {
				// 数据存在
				identifier = separator + todayStr + String.format("%1$03d", identifierdb + 1);
				// 更新原数据
				identifierDao.updateIdentifier(paramMap);
			}

		} else if (separator.equals(BusinessConstant.ORDER_SEPARATOR_BY)) {
			// 流水号
			paramMap.put("separator2", todayStr);
			Integer identifierdb = identifierDao.getIdentifierBySeparator(paramMap);
			if (identifierdb == null) {
				// 数据不存在
				identifier = separator + todayStr + "001";
				// 插入新数据
				identifierDao.insertIdentifier(paramMap);
			} else {
				// 数据存在
				identifier = separator + todayStr + String.format("%1$03d", identifierdb + 1);
				// 更新原数据
				identifierDao.updateIdentifier(paramMap);
			}

		} else {
			// 其他
			Integer identifierdb = identifierDao.getIdentifierBySeparator(paramMap);
			if (identifierdb == null) {
				// 数据不存在
				identifier = separator + "0001";
				// 插入新数据
				identifierDao.insertIdentifier(paramMap);
			} else {
				// 数据存在
				identifier = separator + String.format("%1$04d", identifierdb + 1);
				// 更新原数据
				identifierDao.updateIdentifier(paramMap);
			}
		}
		return identifier;
	}
}
